package core.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import util.DbUtils;

import core.dao.SupermercadoDao;
import core.model.Supermercado;

/**
 * @author andoniibarguchilorenzo
 * clase que contiene los metodos implementados de la interface SupermercadoDao
 */
public class SupermercadoDaoImpl extends GenericDaoImpl<Supermercado, Integer>
		implements SupermercadoDao {

	public Supermercado findBy(int cod_supermercado) {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		List<Supermercado> supermercados = new ArrayList<Supermercado>();
		try {
			ps = connection
					.prepareStatement("SELECT E.NOMBBRE, S.NOMBRE, S.DIRECCION, S.EMAIL, S.HORARIO, S.TELEFONO, S.CP FROM SUPERMERCADO S, EMPRESA E WHERE S.COD_SUPERMERCADO = ? AND E.COD_EMPRESA=S.COD_EMPRESA");
			ps.setInt(1, cod_supermercado);

			ResultSet rs = ps.executeQuery();
			Supermercado supermercado = null;

			while (rs.next()) {
				supermercado = Supermercado.createSupermercado(rs.getString(1),
						rs.getString(2), rs.getString(3), rs.getString(4),
						rs.getString(5), rs.getInt(6), rs.getInt(7));
				supermercados.add(supermercado);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return supermercados.get(0);
	}

	public List<Supermercado> getAll() {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		List<Supermercado> supermercados = new ArrayList<Supermercado>();
		try {
			ps = connection
					.prepareStatement("SELECT COD_SUPERMERCADO, COD_EMPRESA, CP, NOMBRE, DIRECCION, TELEFONO, EMAIL, HORARIO FROM SUPERMERCADO");

			ResultSet rs = ps.executeQuery();
			Supermercado supermercado = null;

			while (rs.next()) {
				supermercado = Supermercado.createSupermercado(rs.getString(1),
						rs.getString(2), rs.getString(3), rs.getString(4),
						rs.getString(5), rs.getInt(6), rs.getInt(7));
				supermercados.add(supermercado);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return supermercados;
	}

	public void deleteSupermercado(int cod_supermercado) {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		try {
			// http://db.apache.org/derby/docs/10.7/ref/crefjavstateautogen.html
			ps = connection
					.prepareStatement("DELETE FROM SUPERMERCADO WHERE COD_SUPERMERCADO = ?");
			ps.setInt(1, cod_supermercado);

			ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void insertSupermercado(Supermercado supermercado) {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		try {
			// http://db.apache.org/derby/docs/10.7/ref/crefjavstateautogen.html
			ps = connection
					.prepareStatement(
							"INSERT INTO SUPERMERCADO (COD_EMPRESA, CP, NOMBRE, DIRECCION, TELEFONO, EMAIL, HORARIO) VALUES (?,?,?,?,?,?)",
							PreparedStatement.RETURN_GENERATED_KEYS);
			ps.setInt(1, supermercado.getCodigo_empresa());
			ps.setInt(2, supermercado.getCp());
			ps.setString(3, supermercado.getNombre());
			ps.setString(4, supermercado.getDireccion());
			ps.setInt(5, supermercado.getTelefono());
			ps.setString(6, supermercado.getEmail());
			ps.setString(7, supermercado.getHorario());

			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public List<Supermercado> getbyEmpresa(int cod_Empresa) {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		List<Supermercado> supermercados = new ArrayList<Supermercado>();
		try {
			ps = connection
					.prepareStatement("SELECT COD_SUPERMERCADO, COD_EMPRESA, CP, NOMBRE, DIRECCION, TELEFONO, EMAIL, HORARIO FROM SUPERMERCADO WHERE COD_EMPRESA = ?	");

			ps.setInt(1, cod_Empresa);
			ResultSet rs = ps.executeQuery();
			Supermercado supermercado = null;

			while (rs.next()) {
				supermercado = Supermercado.createSupermercado(rs.getString(1),
						rs.getString(2), rs.getString(3), rs.getString(4),
						rs.getString(5), rs.getInt(6), rs.getInt(7));
				supermercados.add(supermercado);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return supermercados;
	}
}
